//  Based on https://github.com/nedseb/codal-stm32-iot-node/blob/master/model/STM32IotNodeIO.h
/*
    The MIT License (MIT)

    Copyright (c) 2017 Lancaster University.

    Permission is hereby granted, free of charge, to any person obtaining a
    copy of this software and associated documentation files (the "Software"),
    to deal in the Software without restriction, including without limitation
    the rights to use, copy, modify, merge, publish, distribute, sublicense,
    and/or sell copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    DEALINGS IN THE SOFTWARE.
*/
#ifndef STM32BLUEPILL_IO_H
#define STM32BLUEPILL_IO_H

#include "CodalConfig.h"
#include "STM32BluePillPin.h"

namespace codal
{
    /**
     * Represents a collection of all I/O pins exposed by the device.
     */
    class STM32BluePillIO
    {
    public:
        STM32BluePillIO();

        //  From https://docs.google.com/spreadsheets/d/1yLciHFyPfhRfwEcG3wfqHDgRFa5OoQYTk63bUmTboa8/edit#gid=1888249278

//  Codal Pins are autogenerated. Do not update here
_cm::Pin pa0;
_cm::Pin pa1;
_cm::Pin pa2;
_cm::Pin pa3;
_cm::Pin pa4;
_cm::Pin pa5;
_cm::Pin pa6;
_cm::Pin pa7;
_cm::Pin pa8;
_cm::Pin pa9;
_cm::Pin pa10;
_cm::Pin pa11;
_cm::Pin pa12;
_cm::Pin pa15;
_cm::Pin pb0;
_cm::Pin pb1;
_cm::Pin pb3;
_cm::Pin pb4;
_cm::Pin pb5;
_cm::Pin pb6;
_cm::Pin pb7;
_cm::Pin pb8;
_cm::Pin pb9;
_cm::Pin pb10;
_cm::Pin pb11;
_cm::Pin pb12;
_cm::Pin pb13;
_cm::Pin pb14;
_cm::Pin pb15;
_cm::Pin pc10;
_cm::Pin pc11;
_cm::Pin pc12;
_cm::Pin pd2;
_cm::Pin pd3;
_cm::Pin pd4;
_cm::Pin pd5;
_cm::Pin pd6;
_cm::Pin pd7;
_cm::Pin pd12;
_cm::Pin pd13;
_cm::Pin pd14;
_cm::Pin pd15;
_cm::Pin ch15;
_cm::Pin ch25;
_cm::Pin ch35;
_cm::Pin ch45;
_cm::Pin ch14;
_cm::Pin ch24;
_cm::Pin ch34;
_cm::Pin ch44;
_cm::Pin ch14_remap;
_cm::Pin ch24_remap;
_cm::Pin ch34_remap;
_cm::Pin ch44_remap;
_cm::Pin ch13;
_cm::Pin ch23;
_cm::Pin ch33;
_cm::Pin ch43;
_cm::Pin ch22;
_cm::Pin ch32;
_cm::Pin ch42;
_cm::Pin etr1;
_cm::Pin ch11;
_cm::Pin ch21;
_cm::Pin ch31;
_cm::Pin ch41;
_cm::Pin bkin1;
_cm::Pin ch1n1;
_cm::Pin ch2n1;
_cm::Pin ch3n1;
_cm::Pin tx5;
_cm::Pin rx5;
_cm::Pin tx4;
_cm::Pin rx4;
_cm::Pin tx3;
_cm::Pin rx3;
_cm::Pin ck3;
_cm::Pin cts3;
_cm::Pin rts3;
_cm::Pin cts2;
_cm::Pin rts2;
_cm::Pin tx2;
_cm::Pin rx2;
_cm::Pin ck2;
_cm::Pin cts2_remap;
_cm::Pin rts2_remap;
_cm::Pin tx2_remap;
_cm::Pin rx2_remap;
_cm::Pin ck2_remap;
_cm::Pin tx1;
_cm::Pin rx1;
_cm::Pin tx1_remap;
_cm::Pin rx1_remap;
_cm::Pin smbai1;
_cm::Pin scl1;
_cm::Pin sda1;
_cm::Pin smbai1_remap;
_cm::Pin scl1_remap;
_cm::Pin sda1_remap;
_cm::Pin scl2;
_cm::Pin sda2;
_cm::Pin smbai2;
_cm::Pin nss1;
_cm::Pin sck1;
_cm::Pin miso1;
_cm::Pin mosi1;
_cm::Pin nss1_remap;
_cm::Pin sck1_remap;
_cm::Pin miso1_remap;
_cm::Pin mosi1_remap;
_cm::Pin nss2;
_cm::Pin sck2;
_cm::Pin miso2;
_cm::Pin mosi2;
_cm::Pin nss3;
_cm::Pin sck3;
_cm::Pin miso3;
_cm::Pin mosi3;
_cm::Pin nss3_remap;
_cm::Pin sck3_remap;
_cm::Pin miso3_remap;
_cm::Pin mosi3_remap;
_cm::Pin led;
        
        #ifdef TODO
        _cm::Pin temperature;
        _cm::Pin vref;
        _cm::Pin vbat;
        #endif  //  TODO

    };
}

#endif  //  STM32BLUEPILL_IO_H
